/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package control;

import control.dao.NotaFiscal;
import IRepositorios.IRepositorioCliente;
import IRepositorios.IRepositorioFilme;
import IRepositorios.IRepositorioOperacao;
import control.dao.metodosDVD;
import java.util.List;
import model.*;

/**
 *
 * @author Andre
 */
public class Locadora {

    private IRepositorioFilme filmes;
    private IRepositorioCliente clientes;
    private IRepositorioOperacao operacoes;
    private NotaFiscal notaFiscal;
    private metodosDVD dvds;
    
    public Locadora(IRepositorioFilme filmes, IRepositorioCliente clientes, IRepositorioOperacao operacao, NotaFiscal notaFiscal, metodosDVD dvs) {
        this.filmes = filmes;
        this.clientes = clientes;
        this.operacoes = operacao;
        this.notaFiscal = notaFiscal;
        this.dvds = dvs;
    }

    public void cadastrarCliente(Cliente cliente) {

        clientes.cadastrar(cliente);

    }

    public Cliente buscarCliente(long cpf) {

        return clientes.buscar(cpf);

    }

    public void atualizarCadastroCliente(Cliente cliente) {
        clientes.atualizar(cliente);
    }

    public void removerCliente(long cpf) {
        clientes.deletar(cpf);
    }

    public void removerFilme(Filme filme) {
    }

    public void cadastrarFilme(Filme filme) {
        filmes.cadastrar(filme);
    }

    public Filme buscarFilme(String titulo) {
        return filmes.buscar(titulo);
    }

    public void atualizarCadastro(Filme filme) {
        filmes.atualizar(filme);
    }

    public void removerFilme(int codigo) {
        filmes.deletar(codigo);
    }

    public void reservarFilme(long cpf, int codigo) {
    }

   

    public void finalizarReservaFilme(long cpf, int codigo) {
        operacoes.deletarReserva(cpf, codigo);
    }

    public void locarFilme(Operacao operacao) {
        operacoes.cadastrar(operacao);
    }

    public void locarFilme(Locacao locacao) {
        operacoes.cadastrar(locacao);
    }

    
    public void devolverFilme(long cpf, int codigo) {
        operacoes.deletarLocacao(cpf, codigo);
    }

    public void imprimirHistoricoLocacoes(long cpf) {
    }

    public void imprimirFilmesMaisLocados(int top) {
    }

    public List<Cliente> buscarClienteList(String nome) {
        return clientes.listar(nome);
    }

    public List<Cliente> buscarAllClienteList() {
        return clientes.listar();
    }
    
    public List<Filme> buscarFilmeList(String titulo) {
        return filmes.listar(titulo);
    }

    
    public List<Locacao> buscarLocacoesCliente(String nome) {
        return operacoes.listaLocacoesCliente(nome);
    }

    public Filme buscarFilme(int codigo) {
        return filmes.buscar(codigo);
    }

    public Locacao buscarLocacao(long cpf, int codigo) {
        return operacoes.buscarLocacao(cpf, codigo);
    }

   

    public int LocacoesAtivas(int codigo) {
        return operacoes.numeroLocacoesAtivas(codigo);
    }

    public boolean verificaseFilmeIndisponivel(int codigo) {
        if (filmes.buscar(codigo).getNumeroCopias() <= operacoes.numeroLocacoesAtivas(codigo)) {
            return false;
        } else {
            return true;
        }
    }

    public void gerarNotaFiscal(String adober, String nome, int cod_dvd) {
        notaFiscal.gerar(adober, nome, cod_dvd);
    }

    public void criarGenero(String nome) {
        filmes.criarGenero(nome);
    }

    public void criarAtor(String nome) {
        filmes.criarAtor(nome);
    }

    public List<Filme> buscarAllFilmeList() {
        return filmes.listar();
    }

    public String[] buscarAllAtores() {
        return filmes.buscarAllAtor();
    }

    public String[] buscarAllGeneros() {
        return filmes.buscarAllGeneros();
    }

    public List<DVD> buscarListaDVDs(String nome) {
        return dvds.buscaListaDvds(nome);
    }

    
}
